--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_map_geo_validator.py 59c3a0c47e87e8db699d25b757bb7b599215ddbd (59c3a0c4) Text, 3.92 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787io
Tff7b72import T7ee787json
Tff7b72import T7ee787zipfile
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_geo_validator Tff7b72import Tb4b4b4(
Te6edf3GeoValidationErrorTb4b4b4,
Te6edf3validate_geo_bytesTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_kmz_with_kmlTb4b4b4(Te6edf3kmlTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Tffa657bytesTb4b4b4:
Te6edf3buf Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Te6edf3zfTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffdoc.kmlTa5d6ff"Tb4b4b4, Te6edf3kmlTb4b4b4)
Tff7b72return Te6edf3bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_validate_geojson_okTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffgeometryTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffPointTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Tb4b4b4: Tb4b4b4[T79c0ff1.0Tb4b4b4, T79c0ff2.0Tb4b4b4]Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3dataTb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff100Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8ffformat Tff7b72== Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"
Tff7b72assert Te6edf3resultTff7b72.Td2a8fffeature_count Tff7b72== T79c0ff1
Tff7b72def Td2a8fftest_validate_geojson_rejects_htmlTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3validate_geo_bytesTb4b4b4(
Ta5d6ffbTa5d6ff"Ta5d6ff<!DOCTYPE html><html></html>Ta5d6ff"Tb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff10Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffnot_geo_contentTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffunknown_formatTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffinvalid_geojsonTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_validate_geojson_too_largeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Ta5d6ffbTa5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6fftypeTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffPointTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Ta5d6ff:[0,0]}Ta5d6ff'
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3dataTb4b4b4,
Te6edf3hinted_formatTff7b72=Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"Tb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff5Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff10Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6fffile_too_largeTa5d6ff"
Tff7b72def Td2a8fftest_validate_geojson_coords_out_of_rangeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffPointTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Tb4b4b4: Tb4b4b4[T79c0ff200.0Tb4b4b4, T79c0ff2.0Tb4b4b4]Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3dataTb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff10Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6ffcoordinates_out_of_rangeTa5d6ff"
Tff7b72def Td2a8fftest_validate_kml_okTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3kml Tff7b72= Ta5d6ffbTa5d6ff"""Ta5d6ff<?xml version=Ta5d6ff"Ta5d6ff1.0Ta5d6ff"Ta5d6ff?>
Ta5d6ff <kml xmlns=Ta5d6ff"Ta5d6ffhttp://www.opengis.net/kml/2.2Ta5d6ff"Ta5d6ff>
Ta5d6ff <Document><Placemark><name>x</name>
Ta5d6ff <Point><coordinates>1,2,0</coordinates></Point>
Ta5d6ff </Placemark></Document>
Ta5d6ff </kml>Ta5d6ff"""
Te6edf3result Tff7b72= Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3kmlTb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff100Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8ffformat Tff7b72== Ta5d6ff"Ta5d6ffkmlTa5d6ff"
Tff7b72assert Te6edf3resultTff7b72.Td2a8fffeature_count Tff7b72== T79c0ff1
Tff7b72def Td2a8fftest_validate_kmz_okTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3kml Tff7b72= Ta5d6ffbTa5d6ff"""Ta5d6ff<?xml version=Ta5d6ff"Ta5d6ff1.0Ta5d6ff"Ta5d6ff?>
Ta5d6ff <kml xmlns=Ta5d6ff"Ta5d6ffhttp://www.opengis.net/kml/2.2Ta5d6ff"Ta5d6ff>
Ta5d6ff <Document><Placemark><Point><coordinates>1,2,0</coordinates></Point></Placemark></Document>
Ta5d6ff </kml>Ta5d6ff"""
Te6edf3data Tff7b72= Te6edf3_kmz_with_kmlTb4b4b4(Te6edf3kmlTb4b4b4)
Te6edf3result Tff7b72= Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3dataTb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff100Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8ffformat Tff7b72== Ta5d6ff"Ta5d6ffkmzTa5d6ff"
Tff7b72def Td2a8fftest_validate_kmz_missing_kmlTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3buf Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Te6edf3zfTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffreadme.txtTa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff100Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6ffkmz_missing_kmlTa5d6ff"
Tff7b72def Td2a8fftest_validate_kmz_path_traversal_entryTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3buf Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Te6edf3zfTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ff../evil.kmlTa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ff<kml></kml>Ta5d6ff"Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3validate_geo_bytesTb4b4b4(
Te6edf3bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3max_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3max_featuresTff7b72=T79c0ff100Tb4b4b4,
Te6edf3max_kmz_uncompressed_bytesTff7b72=T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6ffpath_traversalTa5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────